home *** CD-ROM | disk | FTP | other *** search
/ EnigmA Amiga Run 1996 February / EnigmA AMIGA RUN 04 (1996)(G.R. Edizioni)(IT)[!][issue 1996-02][Skylink CD III].iso / earcd / comm2 / termsorc.lha / Extras / Source / gtlayout-source.lha / LT_LevelWidth.c < prev    next >
C/C++ Source or Header  |  1995-09-25  |  3KB  |  118 lines

  1. /*  GadTools layout toolkit
  2. **
  3. **  Copyright © 1993-1995 by Olaf `Olsen' Barthel
  4. **  Freely distributable.
  5. */
  6.  
  7. #include "gtlayout_global.h"
  8.  
  9. STATIC LONG __stdargs
  10. DefaultDispFunc(struct Gadget *gad,WORD value)
  11. {
  12.     return(value);
  13. }
  14.  
  15.  
  16. /*****************************************************************************/
  17.  
  18.  
  19. VOID __stdargs
  20. LTP_LevelWidth(LayoutHandle *handle,STRPTR levelFormat,LONG (* __stdargs dispFunc)(struct Gadget *,WORD),LONG min,LONG max,LONG *maxWidth,LONG *maxLen,BOOL fullCheck)
  21. {
  22.     UBYTE    buffer[80];
  23.     LONG    localMaxWidth;
  24.     LONG    localMaxLen;
  25.     LONG    len;
  26.  
  27.     localMaxWidth    = 0;
  28.     localMaxLen    = 0;
  29.  
  30.     if(handle)
  31.     {
  32.         if(!dispFunc)
  33.             dispFunc = DefaultDispFunc;
  34.  
  35.         if(!levelFormat)
  36.         {
  37.             if(LocaleBase && LocaleBase -> lb_SysPatches)
  38.                 levelFormat = "%lD";
  39.             else
  40.                 levelFormat = "%ld";
  41.         }
  42.  
  43.         if(fullCheck)
  44.         {
  45.             LONG i;
  46.  
  47.             for(i = min ; i <= max ; i++)
  48.             {
  49.                 sprintf(buffer,levelFormat,(*dispFunc)(NULL,i));
  50.  
  51.                 len = strlen(buffer);
  52.  
  53.                 if(len > localMaxLen)
  54.                     localMaxLen = len;
  55.  
  56.                 len = TextLength(&handle -> RPort,buffer,len);
  57.  
  58.                 if(len > localMaxWidth)
  59.                     localMaxWidth = len;
  60.  
  61. //                kprintf("i=%3ld len=%3ld width=%3ld |%s|\n",i,localMaxLen,localMaxWidth,buffer);
  62.             }
  63.         }
  64.         else
  65.         {
  66.             sprintf(buffer,levelFormat,(*dispFunc)(NULL,min));
  67.  
  68.             len = strlen(buffer);
  69.  
  70.             if(len > localMaxLen)
  71.                 localMaxLen = len;
  72.  
  73.             len = TextLength(&handle -> RPort,buffer,len);
  74.  
  75.             if(len > localMaxWidth)
  76.                 localMaxWidth = len;
  77.  
  78. //            kprintf("i=%3ld len=%3ld width=%3ld |%s|\n",min,localMaxLen,localMaxWidth,buffer);
  79.  
  80.             sprintf(buffer,levelFormat,(*dispFunc)(NULL,max));
  81.  
  82.             len = strlen(buffer);
  83.  
  84.             if(len > localMaxLen)
  85.                 localMaxLen = len;
  86.  
  87.             len = TextLength(&handle -> RPort,buffer,len);
  88.  
  89.             if(len > localMaxWidth)
  90.                 localMaxWidth = len;
  91.  
  92. //            kprintf("i=%3ld len=%3ld width=%3ld |%s|\n",max,localMaxLen,localMaxWidth,buffer);
  93.         }
  94.     }
  95.  
  96.     if(maxLen)
  97.         *maxLen = localMaxLen;
  98.  
  99.     if(maxWidth)
  100.         *maxWidth = localMaxWidth + handle -> GlyphWidth;
  101. }
  102.  
  103.  
  104. /*****************************************************************************/
  105.  
  106.  
  107. VOID LIBENT
  108. LT_LevelWidth(REG(a0) LayoutHandle *handle,REG(a1) STRPTR levelFormat,REG(a2) DISPFUNC dispFunc,REG(d0) LONG min,REG(d1) LONG max,REG(a3) LONG *maxWidth,REG(a5) LONG *maxLen,REG(d2) BOOL fullCheck)
  109. {
  110.     LTP_LevelWidth(handle,levelFormat,(LONG (* __stdargs)(struct Gadget *,WORD))dispFunc,min,max,maxWidth,maxLen,fullCheck);
  111. }
  112.  
  113. VOID LIBENT
  114. LT_NewLevelWidth(REG(a0) LayoutHandle *handle,REG(a1) STRPTR levelFormat,REG(a2) DISPFUNC dispFunc,REG(d0) LONG min,REG(d1) LONG max,REG(a3) LONG *maxWidth,REG(d3) LONG *maxLen,REG(d2) BOOL fullCheck)
  115. {
  116.     LTP_LevelWidth(handle,levelFormat,(LONG (* __stdargs)(struct Gadget *,WORD))dispFunc,min,max,maxWidth,maxLen,fullCheck);
  117. }
  118.